﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlServerCe;
using System.Windows.Forms;

namespace ZakaControloCenas.Core
{
    class Db : Utilities
    {
        public DataTable ObterLivros()
        {
            try
            {
                DataTable DataTable = new DataTable();
                SqlQuery = "Select * FROM Livros";
                DataTable = ExecuteDatatable();
                return DataTable;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void InserirLivro(string _Genero, string _Nome,string _Capitulo, string _Completo)
        {
            try
            {
                SqlQuery = "INSERT INTO Livros(Genero,Nome,Capitulo,Completo) VALUES('" + _Genero + "','" + _Nome + "','" + _Capitulo + "','" + _Completo + "')";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ActualizarLivro(int _IdLivro, string _Genero, string _Nome, string _Capitulo, string _Completo)
        {
            try
            {
                SqlQuery = "UPDATE Livros SET Capitulo = '"+ _Capitulo +"' Nome = '" + _Nome + "', Genero = '" + _Genero + "', Completo = '" + _Completo + "'  WHERE IDLivro = '" + _IdLivro + "'";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ApagarLivro(int _IdLivro)
        {
            try
            {
                SqlQuery = "DELETE FROM Livros WHERE IDLivro = '" + _IdLivro + "'";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public DataTable ObterFilmes()
        {
            try
            {
                DataTable DataTable = new DataTable();
                SqlQuery = "Select * FROM Filmes";
                DataTable = ExecuteDatatable();
                return DataTable;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void InserirFilme(string _Nome, string _Genero, string _Data, string _Pontos)
        {
            try
            {
                SqlQuery = "INSERT INTO Filmes(Nome, Genero, DataVisualizacao, Pontuacao) VALUES('" + _Nome + "','" + _Genero + "','" + _Data + "', '" + _Pontos + "')";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ActualizarFilme(int _IdFilme, string _Nome, string _Genero, string _Data, string _Pontos)
        {
            try
            {
                SqlQuery = "UPDATE Filmes SET Nome = '" + _Nome + "', Genero = '" + _Genero + "', DataVisualizacao = '" + _Data + "', Pontuacao = '" + _Pontos + "' WHERE IDFilme = '" + _IdFilme + "'";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ApagarFilme(int _IdFilme)
        {
            try
            {
                SqlQuery = "DELETE FROM Filmes WHERE IDFilme = '" + _IdFilme + "'";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public DataTable ObterSeries()
        {
            try
            {
                DataTable DataTable = new DataTable();
                SqlQuery = "Select * FROM Series";
                DataTable = ExecuteDatatable();
                return DataTable;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void InserirSerie(string _Nome, string _Episodio, string _Temporada, string _Pontos, string _UltimoEpisodio, string _DiaRelease)
        {
            try
            {
                SqlQuery = "INSERT INTO Series(Nome, Episodio, Temporada, Pontuacao, UltimoEpisodio, DiaRelease) VALUES('" + _Nome + "','" + _Episodio + "','" + _Temporada + "', '" + _Pontos + "','" + _UltimoEpisodio + "','" + _DiaRelease + "')";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ActualizarSerie(int _IdSerie, string _Nome, string _Episodio, string _Temporada, string _Pontos, string _UltimoEpisodio, string _DiaRelease)
        {
            try
            {
                SqlQuery = "UPDATE Series SET Nome = '" + _Nome + "', Episodio = '" + _Episodio + "', Temporada = '" + _Temporada + "', Pontuacao = '" + _Pontos + "', UltimoEpisodio = '" + _UltimoEpisodio + "', DiaRelease = '" + _DiaRelease + "' WHERE IDSerie = '" + _IdSerie + "'";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ApagarSerie(int _IdSerie)
        {
            try
            {
                SqlQuery = "DELETE FROM Series WHERE IDSerie = '" + _IdSerie + "'";
                ExecuteQuery();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

    abstract class Utilities
    {
        private string Database = "Data Source=" + Application.StartupPath + "\\..\\..\\Data\\BDOrganizador.sdf";
        private SqlCeConnection Connection;
        private SqlCeCommand Command;
        private SqlCeDataAdapter DataAdapter;
        private DataTable DataTable;

        private string _SqlQuery;
        private string _StoredProcedure;

        public string SqlQuery
        {
            get { return _SqlQuery; }
            set { _SqlQuery = value; }
        }
        public string StoredProcedure
        {
            get { return _StoredProcedure; }
            set { _StoredProcedure = value; }
        }

        public DataTable ExecuteDatatable()
        {
            try
            {
                Connection = new SqlCeConnection(Database);
                Command = new SqlCeCommand(SqlQuery, Connection);
                DataAdapter = new SqlCeDataAdapter(Command);
                DataTable = new DataTable();
                DataAdapter.Fill(DataTable);
                return DataTable;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void ExecuteQuery()
        {
            try
            {
                Connection = new SqlCeConnection(Database);
                Command = new SqlCeCommand(SqlQuery, Connection);
                if (Connection.State == ConnectionState.Closed) { Connection.Open(); }
                Command.ExecuteNonQuery();
                Connection.Close();
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
